package com.wgy.day35函数式接口和Lambda.函数式接口概念和注解;
/*
函数式接口的使用:一般可以作为方法的参数和返回值类型
*/

public class Demo {
    public static void main(String[] args) {
        //调用show方法,方法的参数是一个接口,所以可以传递接口的实现类对象
        show(new MyFunctionalInterfaceImpl());

        //调用show方法,方法的参数是一个接口,所以可以传递接口的匿名内部类
        show(new MyFunctionalInterface() {
            @Override
            public void method() {
                System.out.println("使用匿名内部类重写了接口的抽象方法");
            }
        });

        //调用show方法,方法的参数是一个函数式接口,所以可以传递lambda表达式
        show(() -> {
            System.out.println("使用lambda表达式重写了接口的抽象方法");
        });

        //调用show方法,方法的参数是一个函数式接口,所以可以传递lambda表达式省略格式
        show(() -> System.out.println("使用lambda表达式重写了接口的抽象方法"));


    }

    //定义一个方法,参数使用函数式接口
    public static void show(MyFunctionalInterface myInter) {
        myInter.method();
    }
}
